//package com.albedo.java.modules.sys.service;
//
//import java.util.Locale;
//
//import javax.inject.Inject;
//import javax.mail.internet.MimeMessage;
//
//import org.apache.commons.lang3.CharEncoding;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.context.MessageSource;
//import org.springframework.mail.javamail.JavaMailSenderImpl;
//import org.springframework.mail.javamail.MimeMessageHelper;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.stereotype.Service;
//import org.thymeleaf.context.Context;
//import org.thymeleaf.spring4.SpringTemplateEngine;
//
//import com.albedo.java.common.config.AlbedoProperties;
//import com.albedo.java.modules.sys.domain.User;
//
///**
// * Service for sending e-mails.
// * <p>
// * We use the @Async annotation to send e-mails asynchronously.
// * </p>
// */
//@Service
//public class MailService {
//
//    private final Logger log = LoggerFactory.getLogger(MailService.class);
//
//    private static final String USER = "user";
//    private static final String BASE_URL = "baseUrl";
//
//    @Resource
//    private AlbedoProperties albedoProperties;
//
//    @Resource
//    private JavaMailSenderImpl javaMailSender;
//
//    @Resource
//    private MessageSource messageSource;
//
//    @Resource
//    private SpringTemplateEngine templateEngine;
//
//    @Async
//    public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
//        log.debug("Send e-mail[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
//            isMultipart, isHtml, to, subject, content);
//
//        // Prepare message using a Spring helper
//        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//        try {
//            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, CharEncoding.UTF_8);
//            message.setTo(to);
//            message.setFrom(albedoProperties.getMail().getFrom());
//            message.setSubject(subject);
//            message.setText(content, isHtml);
//            javaMailSender.send(mimeMessage);
//            log.debug("Sent e-mail to User '{}'", to);
//        } catch (Exception e) {
//            log.warn("E-mail could not be sent to user '{}'", to, e);
//        }
//    }
//
//    @Async
//    public void sendActivationEmail(User user, String baseUrl) {
//        log.debug("Sending activation e-mail to '{}'", user.getEmail());
//        Locale locale = Locale.forLanguageTag(user.getLangKey());
//        Context context = new Context(locale);
//        context.setVariable(USER, user);
//        context.setVariable(BASE_URL, baseUrl);
//        String content = templateEngine.process("activationEmail", context);
//        String subject = messageSource.getMessage("email.activation.title", null, locale);
//        sendEmail(user.getEmail(), subject, content, false, true);
//    }
//
//    @Async
//    public void sendCreationEmail(User user, String baseUrl) {
//        log.debug("Sending creation e-mail to '{}'", user.getEmail());
//        Locale locale = Locale.forLanguageTag(user.getLangKey());
//        Context context = new Context(locale);
//        context.setVariable(USER, user);
//        context.setVariable(BASE_URL, baseUrl);
//        String content = templateEngine.process("creationEmail", context);
//        String subject = messageSource.getMessage("email.activation.title", null, locale);
//        sendEmail(user.getEmail(), subject, content, false, true);
//    }
//
//    @Async
//    public void sendPasswordResetMail(User user, String baseUrl) {
//        log.debug("Sending password reset e-mail to '{}'", user.getEmail());
//        Locale locale = Locale.forLanguageTag(user.getLangKey());
//        Context context = new Context(locale);
//        context.setVariable(USER, user);
//        context.setVariable(BASE_URL, baseUrl);
//        String content = templateEngine.process("passwordResetEmail", context);
//        String subject = messageSource.getMessage("email.reset.title", null, locale);
//        sendEmail(user.getEmail(), subject, content, false, true);
//    }
//}
